package com;

/**
 * Created with IntelliJ IDEA.
 * Description:数据流的中位数
 * User: YJ
 * Date: 2024-4-08
 * Time: 21:10
 */
public class E04Leetcode295 {
    private MaxHeap left = new MaxHeap(10);
    private MinHeap right = new MinHeap(10);
    /**
     * 为了保证两边数据量的平衡
     * * 两边个数一样时，左边个数加一
     * * 两边个数不一样时，右边个数加一
     * 但是，随便一个数能直接加入吗
     * * 左边个数加一时，应该右边最小的加入
     * * 右边个数加一时，应该左边最大的加入
     */
    /**
     * 添加数字
     * @param num
     */
    public void addNum(int num) {
        if (left.size == right.size) {
            right.offer(num);
            left.offer(right.poll());
        } else {
            left.offer(num);
            right.offer(left.poll());
        }
    }

    /**
     * 两边数据一致，左右各取堆顶元素求平均
     * 左边多一个，取左边堆顶元素
     */
    public double findMedium() {
        if (left.size == right.size) {
            return (left.peek() + right.peek()) / 2.0;
        } else {
            return left.peek();
        }
    }
}
